/*
 * BitHandlerOutput.cpp
 *
 *  Created on: 15/05/2010
 *      Author: gus
 */

#include "BitHandlerOutput.h"

//BitHandlerOutput::BitHandlerOutput() {}

BitHandlerOutput::BitHandlerOutput(const char* fileName, ios::openmode modo) {

	archSalida.open(fileName,modo);
	indexBitset = 7;

}

BitHandlerOutput::~BitHandlerOutput() {
	archSalida.close();
}

void BitHandlerOutput::seek(int pos) {
	archSalida.seekp(pos);

}

void BitHandlerOutput::siguienteBitEsUno(bool valor) {
	bitSet[indexBitset] = valor;
	indexBitset--;
	if (indexBitset < 0) {
		 escribirSiguienteChar();
		 indexBitset = 7;
	}
	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	//C++ TOMA:
	//0 = FALSE
	//1 = TRUE
	// SI ESO NO GUSTA, SIMPLEMENTE DEVOLVEMOS !retorno (LO INVIERTE)
	// OJO Q SI INVERTIMOS LOS VALORES ACA, HABRA Q INVERTIR TAMBIEN LAS ACCIONES DEL IF EN DONDE SE PREGUNTE EL VALOR
	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}

void BitHandlerOutput::escribirSiguienteChar() {
		ultimoCharEscrito = (int)bitSet.to_ulong();
		archSalida.put(ultimoCharEscrito);//archSalida.put(charConvertido);
		//cout << "ultimoCharEscrito = " << ultimoCharEscrito << endl;
}

char BitHandlerOutput::getUltimoCharEscrito() {
	return ultimoCharEscrito;
}

void BitHandlerOutput::rellenarConCeros() {
	while (indexBitset != 7)
		siguienteBitEsUno(false);
}
